﻿#define   _CRT_SECURE_NO_WARNINGS 1

#include <stdio.h>

//1.⼀道变态的⾯试题：
//不能创建临时变量（第三个变量），实现两个整数的交换

//int main()
//{
//	int a = 10;
//	int b = 15;
//     a = a + b;//25
//	 b = a - b;//15
//	 a = a - b;//10
//	 printf("a = %d b = %d", a, b);
//
//	return 0;
// }

//int main()
//{
//	int a = 15;
//	int b = 20;
//	a = a ^ b;
//	b = a ^ b;
//	a = a ^ b;
//	printf("a = %d b = %d", a, b);
//	return 0;
//}

//练习1：编写代码实现：求⼀个整数存储在内存中的⼆进制中1的个数。

//int fufu(int n)
//{
//	int count = 0;
//	while (n)
//	{
//		n = n & (n - 1);
//		count++;
//	}
//	return count;
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int c = fufu(n);
//	printf("%d", c);
//	return 0;
//}
////把n的值每次与运算（n-1）的值，就会每次去掉一位。

//int fufu(int n)
//{
//	//把n每次右移动一位，跟二进制1做比较；不同为0，相同为1；int类型是32位bie所以循环32次
//	int i = 0;
//	int count = 0;
//	
//	for (i = 0; i < 32; i++)
//	{
//		if (((n >> i) & 1) == 1)
//		{
//			count++;
//		}
//
//	}
//	return count;
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int c = fufu(n);
//	printf("%d", c);
//	return 0;
//}

//短除法，取余数

//int fufu(int n)
//{
//	int count = 0;
//	while (n)
//	{
//		if (n % 2 == 1)
//		{
//			count++;
//
//		}
//		n = n / 2;
//	}
//	return count;
//}
//
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);
//	int c = fufu(n);
//	printf("%d", c);
//	return 0;
//}
//不适合用负数

//练习2：⼆进制位置0或者置1
//编写代码将13⼆进制序列的第5位修改为1，然后再改回0
//int main()
//{
//	int a = 13;
////00000000000000000000000000001101 ^(1<<4) = 00000000000000000000000000011101
//	a = a ^ (1 << 4);
//	printf("%d\n", a);//29
////29 & 11111111111111111111111111101111 = 00000000000000000000000000001101
//	a = a & ~(1<<4);
//	printf("%d", a);
//
//
//	return 0;
//}

//获取一个整数二进制序列中所有的偶数位和奇数位，
//分别打印出二进制序列
//int main()
//{
//	int n = 0;
//	scanf("%d", &n);//7
//	//00000000000000000000000000000000 00000111
//		int i = 0;
//	//打印奇数位
//	for (i = 0; i < 32; i += 2)
//	{
//		printf("%d ", (n >> i) & 1);
//	}
//	printf("\n");
//	for (i = 1; i < 32; i += 2)
//	{
//		printf("%d ", (n >> i) & 1);
//	}
//	return 0;
//}
//结果：
//1 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0
//1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0

int main()
{
	int n = 0;
	scanf("%d", &n); 
	int i = 0;
	//00000111
	for (i = 30; i >= 0; i -= 2)//从左边开始打印奇数位要移动30位；因为奇数位是31开始
	{
		printf("%d ", (n >> i) & 1);
	}
	printf("\n");
	for (i = 31; i >= 1; i -= 2)//从左边开始打印偶数位要移动31位；因为奇数位是32开始
	{
		printf("%d ", (n >> i) & 1);
	}
	return 0;
}

//数组中有：1 2 3 4 5 1 2 3 4，只有5出现一次，其他数字都出现2次，找出5
//int main()
//{
//	int arr[9] = { 1,2,3,4,5,4,3,2,1 };
//	int n = sizeof(arr) / sizeof(arr[0]);
//	int c = 0;
// 	for (int i = 0; i < n; i++)
//	{
//		c ^= arr[i];
//	}
//	printf("%d", c);
//	return 0;
//}
//1+2+3=6
//2+1+3=6
//满足了我们交换律
